#include "dialog.h"
#include <QDebug>
#include <QKeyEvent>
#include <QPainter>
#include <QMessageBox>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    setGeometry(100, 100, 200, 200); // 设置左上角坐标(相对于父窗体)和大小
    grabKeyboard();
}

Dialog::~Dialog()
{

}

void Dialog::paintEvent(QPaintEvent *event)
{
//    {
//        QPainter painter(this);
//        painter.drawRect(0, 0, 100, 100);
//    }

//    {
//        QPainter painter(this);
//        painter.setWindow(0, 0, 200, 200); // 默认就是这样子的，效果跟上面一样
//        painter.drawRect(0, 0, 100, 100);
//    }

//    {
//        QPainter painter(this);
//        painter.setWindow(-50, -50, 100, 100);
//        painter.drawRect(-50, -50, 50, 50);

//        QPen pen(Qt::green, 3, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin);
//        painter.setPen(pen);
//        painter.drawRect(0, 0, 50, 50);
//    }

//    {
//        QPainter painter(this);
//        painter.setViewport(0, 0, 100, 100);
//        painter.drawRect(0, 0, 100, 100);
//    }

//    {
//        QPainter painter(this);

//        qDebug() << "after drag:";
//        qDebug() << painter.viewport().width(); // paintEvent之前，视口会被重置为绘图设备(这里是dialog)实际大小
//        qDebug() << painter.viewport().height();
//        qDebug() << width();
//        qDebug() << height();

//        painter.setViewport(0, 0, 100, 100);
//        painter.drawRect(0, 0, 100, 100);
//    }

//    {
//        QPainter painter(this);

//        qDebug() << "after drag:" << endl;
//        qDebug() << painter.viewport().width();
//        qDebug() << painter.viewport().height();
//        qDebug() << width();
//        qDebug() << height();
//        painter.setViewport(0, 0, 100, 100);
//        painter.setWindow(-50, -50, 100, 100);

//        QPen pen(Qt::green, 3, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin);
//        painter.setPen(pen);
//        painter.drawRect(0, 0, 100, 100);
//    }

//    {
//        QPainter painter(this);
//        painter.setBrush(Qt::red);
//        painter.drawRect(0, 0, 100, 100);
//        painter.setBrush(Qt::yellow);
//        painter.drawRect(-50, -50, 100, 100);
//    }

//    {
//        // 平移变换
//        QPainter painter(this);
//        painter.setBrush(Qt::yellow);
//        painter.drawRect(0, 0, 50, 50);
//        painter.translate(100, 100);  // 将点(100,100)设为原点
//        painter.setBrush(Qt::red);
//        painter.drawRect(0, 0, 50, 50);
//        painter.translate(-100, -100); // 将(0,0)设为原点
//        painter.drawLine(0, 0, 20, 20);
//    }

//    {
//        // 缩放
//        QPainter painter(this);
//        painter.setBrush(Qt::yellow);
//        painter.drawRect(0, 0, 100, 100);
//        painter.scale(2, 1.5); // x方向放大2倍，y方向放大1.5倍
//        painter.setBrush(Qt::red);
//        painter.drawRect(50, 50, 50, 50); // 这里的值都要乘以相应的放大系数
//    }

//    {
//        // 扭曲
//        QPainter painter(this);
//        painter.setBrush(Qt::yellow);
//        painter.drawRect(0, 0, 50, 50);
//        painter.setBrush(Qt::red);
//        painter.shear(0, 1); // 纵向扭曲变形
//        painter.drawRect(50, 0, 50, 50);
//    }

//    {
//        // 旋转
//        QPainter painter(this);
//        painter.drawLine(0, 0, 100, 0);
//        painter.rotate(30); // 以原点为中心，顺时针旋转30度
//        painter.drawLine(0, 0, 100, 0);
//        painter.translate(100, 100);
//        painter.rotate(30);
//        painter.drawLine(0, 0, 100, 0);
//    }

//    {
//        QPainter painter(this);
//        painter.save(); // 保存坐标系状态
//        painter.translate(100, 100);
//        painter.drawLine(0, 0, 50, 50);
//        painter.restore(); // 恢复以前的坐标系状态
//        painter.drawLine(0, 0, 50, 50);
//    }

    {
        QPainter painter(this);
        QPixmap pix(100, 100);
        pix.fill(Qt::red);   //背景填充为红色
        painter.drawPixmap(100, 100, pix);
    }
}

void Dialog::keyPressEvent(QKeyEvent *event)
{
    switch (event->key())
    {
        case Qt::Key_PageUp:
        case Qt::Key_Left:
        case Qt::Key_Up:
        case Qt::Key_A:
        {
            qDebug() << "1";
            QMessageBox::about(this, "1", "page up");
        }
        break;

        case Qt::Key_PageDown:
        case Qt::Key_Right:
        case Qt::Key_Down:
        case Qt::Key_D:
        {
            qDebug() << "2";
            QMessageBox::about(this, "2", "page down");
        }
        break;

        default:
        {
            qDebug() << event->key();
            QDialog::keyPressEvent(event);
        }
        break;
    }
}

void Dialog::keyReleaseEvent(QKeyEvent *event)
{
    QDialog::keyReleaseEvent(event);
}

void Dialog::mousePressEvent(QMouseEvent *event)
{
    qDebug() << event->pos();
}
